home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 2 / CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso / magazine / amiga_e / amigae.jan.archive / 000035_crash!ifi.uio.no!arvidj_Sun, 16 Jan 94 01:11:41 PST.msg < prev    next >
Text File  |  1994-02-17  |  11KB  |  378 lines

  1. Received: by bkhouse.cts.com (V1.17-beta/Amiga)
  2.       id <1le0@bkhouse.cts.com>; Sun, 16 Jan 94 01:11:41 PST
  3. Received: from ifi.uio.no by crash.cts.com with smtp
  4.     (Smail3.1.28.1 #18) id m0pLHGW-0000dqC; Sat, 15 Jan 94 12:06 PST
  5. Received: from sognsvann.ifi.uio.no by ifi.uio.no with ESMTP (8.6.4/ifi2.4) 
  6.     id <VAA21029@ifi.uio.no> for <amigae@bkhouse.cts.com> ; Sat, 15 Jan 1994 21:06:28 +0100
  7. Received: from localhost by sognsvann.ifi.uio.no ; Sat, 15 Jan 1994 21:06:17 +0100
  8. MIME-Version: 1.0
  9. Message-Id: <19940115200617.19386.sognsvann.ifi.uio.no@ifi.uio.no>
  10. Date: Sat, 15 Jan 1994 21:06:16 +0100 (MET)
  11. X-Mailer: ELM [version 2.4 PL21]
  12. Content-Type: text
  13. Content-Length: 8090
  14. From: =?iso-8859-1?Q?Arvid_S=F8ndrol_Johansen?=  <arvidj@ifi.uio.no>
  15. To: amigae@bkhouse.cts.com (amigae)
  16. Subject: Image on a (gadtools) gadget.
  17.  
  18.  
  19. Does anybody know how to put an image on a (gadtools) gadget? We've
  20. tried something like this:
  21.  
  22.  
  23. /*------------------------ START OF SOURCE ------------------------- */
  24.  
  25. /* An experimental source to get an image on a gadtools gadget - 
  26.    does not work!
  27.  
  28.    The image is a brush of a magnify glass converted to bitmap by a
  29.    program from the stone age - DeLuxeConvert.
  30. */
  31.  
  32. ENUM    NONE,
  33.     ER_OPENLIB,
  34.     ER_WB,
  35.     ER_VISUAL,
  36.     ER_CONTEXT,
  37.     ER_GADGET,
  38.     ER_WINDOW,
  39.     ER_MEMORY
  40.  
  41. MODULE    'intuition/intuition',
  42.     'intuition/gadgetclass',
  43.     'intuition/screens',
  44.     'gadtools',
  45.     'libraries/gadtools',
  46.     'exec/memory'
  47.     'exec/nodes',
  48.  
  49. DEF    scr=NIL:PTR TO screen,
  50.     wnd=NIL:PTR TO window,
  51.     magnify=NIL:PTR TO gadget,
  52.     picture=NIL:PTR TO image,
  53.     visual=NIL,
  54.     glist=NIL,
  55.     offsety,
  56.     g,
  57.     type,
  58.     infos,
  59.     memblock
  60.  
  61.  
  62. PROC main() HANDLE
  63.     openinterface()
  64.     REPEAT
  65.         wait4message()
  66.     UNTIL type=IDCMP_CLOSEWINDOW
  67.     Raise(NONE)
  68. EXCEPT
  69.     closeinterface()
  70.     IF exception>0 THEN WriteF('Could not \s!\n',
  71.         ListItem(['',
  72.             'open "gadtools.library" v37',
  73.             'lock workbench',
  74.             'get visual infos',
  75.             'create context',
  76.             'create gadget',
  77.             'open window',
  78.             'alloc chip memory'],exception))
  79. ENDPROC
  80.  
  81. PROC openinterface()
  82.  
  83. /* Prepare everything */
  84.  
  85.     IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))=NIL THEN Raise(ER_OPENLIB)
  86.     IF (scr:=LockPubScreen('Workbench'))=NIL THEN Raise(ER_WB)
  87.     IF (visual:=GetVisualInfoA(scr,NIL))=NIL THEN Raise(ER_VISUAL)
  88.     offsety:=scr.wbortop+Int(scr.rastport+58)+1
  89.     IF (g:=CreateContext({glist}))=NIL THEN Raise(ER_CONTEXT)
  90.  
  91. /* Alloc and copy image to chip memory */
  92.  
  93.     IF (memblock:=AllocMem(128,MEMF_CHIP))=NIL THEN Raise(ER_MEMORY)
  94.     CopyMem({bitmap},memblock,128)
  95.  
  96. /* Define image structure */
  97.  
  98.     picture.leftedge:=0
  99.     picture.topedge:=0
  100.     picture.width:=25
  101.     picture.height:=15
  102.     picture.depth:=2
  103.     picture.imagedata:=memblock
  104.     picture.planepick:=NIL
  105.     picture.planeonoff:=NIL
  106.     picture.nextimage:=NIL
  107.  
  108. /* Define newgadget structure */
  109.  
  110.     magnify.nextgadget:=0
  111.     magnify.leftedge:=154
  112.     magnify.topedge:=148
  113.     magnify.width:=25
  114.     magnify.height:=15
  115.     magnify.flags:=4
  116.     magnify.activation:=0
  117.     magnify.gadgettype:=1
  118.     magnify.gadgetrender:=picture
  119.     magnify.selectrender:=0
  120.     magnify.gadgettext:=0
  121.     magnify.mutualexclude:=0
  122.     magnify.specialinfo:=0
  123.     magnify.gadgetid:=3
  124.     magnify.userdata:=0
  125.  
  126. /* Create imagegadget */
  127.  
  128.     IF (magnify:=g:=CreateGadgetA(BUTTON_KIND,g,
  129.         [154,148,25,15,NIL,NIL,1,0,visual,0]:newgadget,
  130.         [GA_IMAGE,picture,
  131.         NIL]))=NIL THEN Raise(ER_GADGET)
  132.  
  133. /* Open and refresh window */
  134.  
  135.     IF (wnd:=OpenW(10,15,200,offsety+165,$304 OR SCROLLERIDCMP,$E,
  136.         'ImageGadget',NIL,1,glist))=NIL THEN Raise(ER_WINDOW)
  137.     Gt_RefreshWindow(wnd,NIL)
  138. ENDPROC
  139.  
  140. PROC closeinterface()
  141.     IF visual THEN FreeVisualInfo(visual)
  142.     IF wnd THEN CloseWindow(wnd)
  143.     IF glist THEN FreeGadgets(glist)
  144.     IF scr THEN UnlockPubScreen(NIL,scr)
  145.     IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
  146. ENDPROC
  147.  
  148. PROC wait4message()
  149.     DEF mes:PTR TO intuimessage,g:PTR TO gadget
  150.     REPEAT
  151.         type:=0
  152.         IF mes:=Gt_GetIMsg(wnd.userport)
  153.             type:=mes.class
  154.             IF (type=IDCMP_GADGETDOWN) OR (type=IDCMP_GADGETUP)
  155.                 g:=mes.iaddress
  156.                 infos:=g.gadgetid
  157.             ELSEIF type=IDCMP_REFRESHWINDOW
  158.                 Gt_BeginRefresh(wnd)
  159.                 Gt_EndRefresh(wnd,TRUE)
  160.                 type:=0
  161.             ELSEIF type<>IDCMP_CLOSEWINDOW
  162.                 type:=0
  163.             ENDIF
  164.             Gt_ReplyIMsg(mes)
  165.         ELSE
  166.             Wait(-1)
  167.         ENDIF
  168. UNTIL type
  169. ENDPROC
  170.  
  171. /* Include binary file of image (raw bitmap without colour map) from 
  172.    hard disk. 
  173. */
  174.  
  175. bitmap:
  176. INCBIN 'rf:test.bitm'
  177.  
  178. /*------------------------- END OF SOURCE -------------------------- */
  179.  
  180.  
  181. This source gives us a window with an empty gadget - no image!
  182. We've also tried AddGadget(), but can't get the gadget on the screen 
  183. at all. Most of the times a pattern appeared, the screen got black, 
  184. and the Amiga crashed without any warnings (sometimes we got guru 
  185. number 81000005 or 8100000B).
  186.  
  187. Can anybody help us with this problem?
  188.  
  189.  
  190. In Karl-Erik's experiments with INCBIN, he also discovered how to 
  191. include an IFF file into a program and show it with iff.library:
  192.  
  193.  
  194. /*------------------------ START OF SOURCE ------------------------- */
  195.  
  196. /* 
  197.    Example for including an IFF ILBM-picture into your code and display
  198.    it. Source made by Karl-Erik Ruud. 
  199.    This source is based on an iff.library source posted here earlier 
  200.    (by Dave Higginson I think - please correct me if I'm wrong!)
  201.    
  202.    It is not neccesary to use IfFL_OpenIff().
  203.  
  204.    Change the name of the bitmap (at the end of the source) to your own
  205.    picture path and name.
  206. */
  207.  
  208.  
  209. MODULE    'iff',            /* Iff library funtions and registers */
  210.     'libraries/iff',    /* Iff library header */
  211.     'intuition/intuition',    /* Intuition header */
  212.     'intuition/screens',    /* Screen types and flags */
  213.     'exec/memory',        /* Memory flags */
  214.     'graphics/display'    /* Display modes for screen */
  215.  
  216. ENUM    ER_NONE,        /* No error */
  217.     ER_IFFLIB,        /* No iff-library */
  218.     ER_OPENIFF,        /* Could not open iff */
  219.     ER_NOBMHD,        /* No bitmap header (dimmensions) */
  220.     ER_SCREEN,        /* Could not open screen */
  221.     ER_WINDOW,        /* Could not open window */
  222.     ER_DECODE        /* Could not decode picture */
  223.  
  224. DEF    s=NIL,            /* Screen */
  225.     ct[256]:ARRAY OF INT,    /* Colour table (up to 256 colours) */
  226.     bmhd,            /* Bitmap header (width (bmhd), height (bmhd+2), depth (bmhd+8)) */
  227.     w=NIL:PTR TO window,    /* Pointer to window */
  228.     quit=FALSE,        /* Variable to decide if the user quit */
  229.     msg:PTR TO intuimessage, /* Pointer to intuition message */
  230.     sprite=NIL,        /* Invisible sprite data */
  231.     viewmode=NIL        /* Viewmode (f.ex. HOLDANDMODIFY+INTERLACE) */
  232.  
  233.  
  234. PROC main() HANDLE
  235.  
  236. /* Open iff.library  */
  237.  
  238.     IF (iffbase:=OpenLibrary('iff.library',21))=NIL THEN Raise(ER_IFFLIB)
  239.  
  240. /* BMHD = BitMap Header (contains dimensions of picture)
  241.    bmhd=picturewidth
  242.    bmhd+2=pictureheight
  243.    bmhd+8=number of bitplanes
  244. */
  245.  
  246.     IF (bmhd:=IfFL_GetBMHD({bitmap}))=NIL THEN Raise(ER_NOBMHD)
  247.  
  248. /* If no viewmode info in file, calculate it (a hack that fails sometimes) */
  249.  
  250.     IF (IfFL_FindChunk({bitmap},'CAMG'))=NIL
  251.         IF Int(bmhd)>=640
  252.             viewmode:=MODE_640
  253.         ELSEIF Int(bmhd)<640
  254.             viewmode:=0
  255.             IF Char(bmhd+8)=6 THEN viewmode:=viewmode+$800
  256.         ENDIF
  257.         IF Int(bmhd+2)>300 THEN viewmode:=viewmode+INTERLACE
  258.     ELSE
  259.         viewmode:=IfFL_GetViewModes({bitmap})
  260.     ENDIF
  261.  
  262. /* Open screen with correct dimensions */
  263.  
  264.     IF (s:=OpenScreenTagList(NIL,
  265.         [SA_WIDTH,Int(bmhd),
  266.          SA_HEIGHT,Int(bmhd+2),
  267.          SA_DEPTH,Char(bmhd+8),
  268.          SA_DISPLAYID,viewmode,
  269.          SA_TYPE,PUBLICSCREEN,
  270.          0,0]))=NIL THEN Raise(ER_SCREEN)
  271.  
  272. /* Open a window based on the pictures dimmensions */
  273.  
  274.         IF (w:=OpenWindowTagList(NIL,
  275.         [WA_LEFT,0,
  276.          WA_TOP,0,
  277.          WA_WIDTH,Int(bmhd),
  278.          WA_HEIGHT,Int(bmhd+2),
  279.          WA_FLAGS,WFLG_SIMPLE_REFRESH OR WFLG_NOCAREREFRESH OR WFLG_BORDERLESS OR WFLG_ACTIVATE,
  280.          WA_IDCMP,IDCMP_MOUSEBUTTONS OR IDCMP_RAWKEY,
  281.          WA_PUBSCREEN,s,
  282.          NIL,NIL]))=NIL THEN Raise(ER_WINDOW)
  283.  
  284. /* Blank the mouse pointer */
  285.  
  286.     IF sprite:=AllocMem(20,MEMF_CHIP OR MEMF_CLEAR)
  287.         SetPointer(w,sprite,1,16,0,0)
  288.     ENDIF
  289.  
  290. /* Set the palette of the screen */
  291.  
  292.     LoadRGB4(s+44,ct,IfFL_GetColorTab({bitmap},ct))
  293.  
  294. /* Try to load the picture */
  295.  
  296.     IF (IfFL_DecodePic({bitmap},s+184))=FALSE THEN Raise(ER_DECODE)
  297.  
  298. /* Wait for the user to press the mouse or a button */
  299.  
  300.     REPEAT
  301.         IF msg:=GetMsg(w.userport)
  302.             quit:=(msg.class AND (IDCMP_MOUSEBUTTONS OR IDCMP_RAWKEY))
  303.         ELSE
  304.             quit:=(Wait(-1) AND Shl(1,12))
  305.         ENDIF
  306.     UNTIL quit
  307.     Raise(ER_NONE)        /* Do not give any error */
  308. EXCEPT                /* Handle expections */
  309.  
  310. /* Clean up */
  311.  
  312.     IF w THEN CloseWindow(w)
  313.     IF sprite THEN FreeMem(sprite,20)
  314.     IF s THEN CloseScreen(s)
  315.     IF iffbase THEN CloseLibrary(iffbase)
  316.  
  317. /* Display possible error message */
  318.  
  319.     IF exception>0
  320.         WriteF('Error: \s.\n',
  321.             ListItem(['',
  322.                   'No IFF library version >21',
  323.                   'Could not open IFF file',
  324.                   'IFF File had no bitmap header',
  325.                   'Could not open screen',
  326.                   'Could not open window',
  327.                   'Could not decode picture'],
  328.                 exception))
  329.     ENDIF
  330. ENDPROC
  331.  
  332. /* Include an IFF image in the code - replace this with your own */
  333.  
  334. bitmap:
  335.  
  336. INCBIN 'dh0:pictures/Babylon5.iff'
  337.  
  338. /*------------------------- END OF SOURCE -------------------------- */
  339.  
  340.  
  341.  
  342.                        >>>-- Arvid --> and K-E
  343.  
  344. (Hope this came correctly through...)
  345. From crash!hermes.cam.ac.uk!dmh1002 Mon, 17 Jan 94 01:06:38 PST
  346. Received: by bkhouse.cts.com (V1.17-beta/Amiga)
  347.       id <1lki@bkhouse.cts.com>; Mon, 17 Jan 94 01:06:38 PST
  348. Received: from ppsw2.cam.ac.uk by crash.cts.com with smtp
  349.     (Smail3.1.28.1 #18) id m0pLX5Q-0000dRC; Sun, 16 Jan 94 05:00 PST
  350. Received: from black.csi.cam.ac.uk by ppsw2.cam.ac.uk 
  351.           with SMTP-CAM (PP-6.0) as ppsw.cam.ac.uk 
  352.           id <21921-0@ppsw2.cam.ac.uk>; Sun, 16 Jan 1994 13:00:02 +0000
  353. Received: from hermes.cam.ac.uk by black.csi.cam.ac.uk 
  354.           id <04499-0@black.csi.cam.ac.uk>; Sun, 16 Jan 1994 12:59:54 +0000
  355. Date: Sun, 16 Jan 1994 13:01:02 +0000 (GMT)
  356. In-Reply-To: <19940115200617.19386.sognsvann.ifi.uio.no@ifi.uio.no>
  357. Message-ID: <Pine.3.89.9401161254.A4602-0100000@blue.csi.cam.ac.uk>
  358. MIME-Version: 1.0
  359. Content-Type: TEXT/PLAIN; charset=US-ASCII
  360. Sender: dmh1002@hermes.cam.ac.uk
  361. From: Dave Higginson <dmh1002@hermes.cam.ac.uk>
  362. To: The AmigaE Mailing List <AmigaE@bkhouse.cts.com>
  363. Subject: Re: Image on a (gadtools) gadget.
  364.  
  365.  
  366. You're not allowed to modify a GadTools gadget using your own image
  367. rendering, and I would guess that the button gadget does not recognise the
  368. GA_IMAGE tag. Your best bet would be to use a GENERIC_KIND gadget with
  369. your own rendering. The Libraries RKM describes how to do this.
  370.  
  371. Cheers
  372. Dave Higginson
  373.  
  374. And yes, I did post the iff source :-)
  375.  
  376. P.S. It's nice to be back. I see that Norm's changed to a listserv 
  377. system. I had major problems subscribing last year between September and 
  378. November because I could not get any mail through to Norm.